Objectives

The goal of this step in the workflow is to compare S2 streamflow height to air temperature data in order to quality check the streamflow data.

Set Up

  • Install/load necessary R packages

  • Set working directory if necessary (or create a file path to use throughout the RMD to call the data from Box)

  • Read in data from CSVs, made in prior workflow steps, from the intermediate_data directory

#read in necessary CSV files from prior RMDs
all_streamflow <- read_csv(here("intermediate_data", "all_streamflow.csv"))
air_temp_30_clean <- read_csv(here("intermediate_data", "air_temp_30_clean.csv"))
mc_clean <- read_csv(here("intermediate_data", "mc_clean.csv")) %>% 
  rename(datetime = collected)
precip_15_clean <- read_csv(here("intermediate_data", "precip_15_clean.csv")) 
precip_6h_clean <- read_csv(here("intermediate_data", "precip_6h_clean.csv")) 
precip_12h_clean <- read_csv(here("intermediate_data", "precip_12h_clean.csv")) 
precip_daily_clean <- read_csv(here("intermediate_data", "precip_daily_clean.csv")) 
precip_daily_join <- read_csv(here("intermediate_data", "precip_daily_join.csv")) 
  • Set date range of interest
#set constants 
min_year = 2017
max_year = 2021

Daily Cumulative Precipitation + Air Temperature Every 30min

  • Format the data
#format precipitation data for plotting 
precip_15_join <- precip_15_clean %>% 
  pivot_wider(
    names_from = "precip_type",
    values_from = "precip_in"
  ) %>% 
  subset(year >= min_year & year <= max_year) %>% 
  rename(precip_10_in = precip_10)

precip_daily_join <- precip_daily_join %>% 
  mutate(dummy = "b",
         dummy = as.factor(dummy))

#format air temperature data for plotting 
airtemp_join <- air_temp_30_clean %>% 
  pivot_wider(
    names_from = "airtemp_type",
    values_from = "airtempC"
  ) %>% 
  subset(year >= min_year & year <= max_year) %>% 
  mutate(freezing = as.factor(freezing),
         dummy = "a")

#format air temp data for plotting 
precip_air <- full_join(x = precip_15_join, 
                        y = airtemp_join, 
                        by = c("datetime", "year")) %>% 
  subset(year >= min_year & year <= max_year)

#join air and precipitation data 
precip_air <- full_join(x = precip_15_join, 
                        y = airtemp_join, 
                        by = c("datetime", "year")) %>% 
  subset(year >= min_year & year <= max_year)
  • Plot

    • air temperature (ºC / 100) is plotted as a pink line, and

    • cumulative daily precipitation (in / 10) is plotted as grey bars.

#plot
p_daily <- ggplot() + 
  #airtemp data
  geom_line(data = airtemp_join, 
            aes(x = datetime, 
                y = airtempc_100,
                color = dummy,
                group = 1,
                #create hovering labels for interactive graph 
                text = paste0("DateTime: ", datetime, "\n",
                              "AirTemp (ºC/100): ", airtempc_100)
                ),
            color = "pink",
            alpha = 0.5,
            size = 0.25) + 
  #precipitation data 
  geom_col(data = precip_daily_join, 
            aes(x = datetime, 
                y = precip_10_in,
                colour = dummy,
                group = 1,
                text = paste0("Date: ", date, "\n",
                              "Daily Cumulative Precipitation (in/10): ", precip_10_in)),
            size = 0.25,
            color = I("grey")) +
  theme_classic() + 
  labs(x = "Time", 
       y = " ", 
       #title = "S2 Daily Cumulative Precipitation \n and Air Temperature Every 30min",
       subtitle = "Daily cumulative precipitation is plotted in grey. \n Air temperature is plotted in pink.") + 
  theme(plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, 
                                     size = 7)) 

#interactive plot
ggplotly(p_daily,
         tooltip = "text") %>% 
  layout(title = list(text = paste0(paste0("S2 Daily Cumulative Precipitation \n and Air Temperature Every 30min (", min_year, "-", max_year, ")"),
                                    '<br>',
                                    '<sup>',
                                     paste0("Daily cumulative precipitation is plotted in grey. \n Air temperature is plotted in pink."), 
                                    '</sup>')), 
         font = list(size = 12)
         )

Streamflow + Air Temperature Every 30min + Manual Checkpoints

For interactive plots,

  • air temperature (ºC / 100) is plotted as a pink line,

  • streamflow (ft) is plotted as a blue line,

  • and streamflow manual checkpoints (ft) are plotted as black dots.

#calculate the ratio of the 2 y-axes to plot the variables together in the static plot
trans_value <- max(airtemp_join$airtempc_100, na.rm = TRUE) / max(all_streamflow$stream_height_ft, na.rm = TRUE)

#plot 
p_air <- ggplot() + 
  #airtemp data
  geom_line(data = airtemp_join, 
            aes(x = datetime,
                y = airtempc_100, 
                group = 1,
                #create hovering labels for interactive graph 
                text = paste0("DateTime: ", datetime, "\n",
                              "AirTemp (ºC/100): ", airtempc_100)
                ),
            color = "pink", 
            alpha = 0.4) +
  #streamflow data 
  geom_line(data = all_streamflow,
             aes(x = datetime, 
                 y = stream_height_ft,
                 group = 1,
                 #create hovering labels for interactive graph 
                 text = paste0("DateTime: ", datetime, "\n",
                              "Stream Height (ft): ", round(stream_height_ft, digits = 3))
                 ),
            color = "blue",
            size = 0.75) + 
  #manual check points
  geom_point(data = mc_clean, 
             aes(x = datetime, 
                 y = stripchart_stage,
                 group = 1,
                 #create hovering labels for interactive graph 
                 text = paste0("DateTime: ", datetime, "\n",
                              "Manual Stream Height Check (ft): ", stripchart_stage)
                 ),
             size = 0.5) + 
  theme_classic() + 
  labs(x = "Time", 
       y = " ",
       title = paste0("S2 Bog Streamflow and Air Temperature (", min_year, "-", max_year, ")"),
       subtitle = "Air temperature is plotted in pink. \n Streamflow is plotted in blue. \n Manual streamflow checkpoints are plotted as black dots.") + 
  theme(plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, 
                                     size = 7)) + 
  scale_y_continuous(
    # Features of the first axis
    name = "Air Temperature / 100 (ºC)",
    # Add a second axis and specify its features
    sec.axis = sec_axis(trans = ~.*trans_value, name = "Stream Height (ft)")
  ) 

#interactive plot
ggplotly(p_air,
         tooltip = "text") %>% 
  layout(title = list(text = paste0(paste0("S2 Bog Streamflow and Air Temperature (", min_year, "-", max_year, ")"),
                                    '<br>',
                                    '<sup>',
                                     paste0(" "), 
                                    '</sup>')), 
         font = list(size = 12)
         )

Streamflow + Daily Cumulative Precipitation + Air Temperature Every 30min + Manual Checkpoints

For interactive plots,

  • air temperature (ºC / 100) is plotted as a pink line,

  • cumulative daily precipitation (in / 10) is plotted as grey bars,

  • streamflow (ft) is plotted as a blue line,

  • and streamflow manual checkpoints (ft) are plotted as black dots.

#plot 
p_all <- ggplot() + 
  #airtemp data
  geom_line(data = airtemp_join, 
            aes(x = datetime,
                y = airtempc_100, 
                group = 1,
                #create hovering labels for interactive graph 
                text = paste0("DateTime: ", datetime, "\n",
                              "AirTemp (ºC/100): ", airtempc_100)
                ), 
            color = "pink",
            alpha = 0.4) +
  #streamflow data 
  geom_line(data = all_streamflow,
             aes(x = datetime, 
                 y = stream_height_ft,
                 group = 1,
                 #create hovering labels for interactive graph 
                 text = paste0("DateTime: ", datetime, "\n",
                              "Stream Height (ft): ", round(stream_height_ft, digits = 3))
                 ),
            color = "blue",
            size = 0.75) + 
  #manual check points
  geom_point(data = mc_clean, 
             aes(x = datetime, 
                 y = stripchart_stage,
                 group = 1,
                 #create hovering labels for interactive graph 
                 text = paste0("DateTime: ", datetime, "\n",
                              "Manual Stream Height Check (ft): ", stripchart_stage)
                 ),
             size = 0.5) + 
  #daily precipitation data 
  geom_col(data = precip_daily_join, 
            aes(x = datetime, 
                y = precip_10_in,
                group = 1,
                text = paste0("Date: ", date, "\n",
                              "Daily Cumulative Precipitation (in/10): ", precip_10_in)),
            colour = I("grey"),
            size = 0.25) +
  theme_classic() + 
  labs(x = "Time", 
       y = " ", 
       title = paste0("S2 Bog Streamflow, Air Temperature, \n and Daily Cumulative Precipitation (", min_year, "-", max_year, ")"),
       subtitle = "Air temperature is plotted in pink and scaled by 100. 
       Precipitation is plotted as grey bars and scaled by 10.
       Streamflow is plotted in blue.
       Manual streamflow checkpoints are plotted as black dots.") + 
  theme(plot.title = element_text(hjust = 0.5),
        plot.subtitle = element_text(hjust = 0.5, 
                                     size = 7),
        legend.position = "none") 

#interactive plot
ggplotly(p_all,
         tooltip = "text") %>% 
  layout(title = list(text = paste0(paste0("S2 Bog Streamflow, Air Temperature, \n and Daily Cumulative Precipitation (", min_year, "-", max_year, ")"),
                                    '<br>',
                                    '<sup>',
                                     paste0(""), 
                                    '</sup>')), 
         font = list(size = 12)
         )

Code Accessibility

Note that this file is being knit as index.html into the air_comparisons repository in order to update the GitHub pages website, where the plots can be viewed online.